/**
 * @Author ZhangCuirong
 * @Date 2025/9/16 15:17
 * @description:
 */
public class Solution154 {
    /**
     * 我们考虑数组中的最后一个元素 x：在最小值右侧的元素（不包括最后一个元素本身），它们的值一定都严格小于 x；而在最小值左侧的元素，它们的值一定都严格大于 x。因此，我们可以根据这一条性质，通过二分查找的方法找出最小值。
     *
     * @param nums
     * @return
     */
    public int findMin(int[] nums) {
        int left = 0, right = nums.length - 1;
        while (left < right) {
            int mid = left + (right - left) / 2;
            if (nums[mid] > nums[right]) {//在左边
                left = mid + 1;
            } else if (nums[mid] == nums[right]) {
                right -= 1;
            } else {//在右侧
                right = mid;
            }
        }
        return nums[left];
    }

    public static void main(String[] args) {
        Solution154 solution = new Solution154();
        System.out.println(solution.findMin(new int[]{1, 3, 5}));
        System.out.println(solution.findMin(new int[]{2, 2, 2, 0, 1}));
        System.out.println(solution.findMin(new int[]{3, 1, 3}));
        System.out.println(solution.findMin(new int[]{1, 3, 3}));
        System.out.println(solution.findMin(new int[]{3, 1, 1}));
    }
}
